home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / prolog / modprolg / mod-prol.lha / Prolog / Examples / final_report.mod < prev    next >
Text File  |  1992-06-08  |  2KB  |  89 lines

  1.         structure stack1 =
  2.             struct
  3.                 fun item/2 and empty/0.
  4.                 newstack(empty).
  5.                 pop(item(X,Stack),Stack,X).
  6.                 push(Stack,X,item(X,Stack)).
  7.                 isempty(empty).
  8.             end.
  9.  
  10.         signature stacksig =
  11.             sig
  12.                 pred pop/3 and push/3 and newstack/1 and isempty/1.
  13.             end.
  14.         
  15.         structure stack2/stacksig =
  16.             struct
  17.                 fun item/2 and empty/0.
  18.                 newstack(empty).
  19.                 pop(item(X,Stack),Stack,X).
  20.                 push(Stack,X,item(X,Stack)).
  21.                 isempty(empty).
  22.             end.
  23.  
  24.         structure uses_stacks =
  25.             struct
  26.                 fun item/2.
  27.                 fun newitem/2 = stack1:item.
  28.                 stack_non_empty(newitem(_,_)).
  29. %                ....
  30.             end.
  31.  
  32.         structure renamedstack = stack2.
  33.  
  34.         functor utils(x/stacksig) =
  35.             struct
  36.                 structure s = x.
  37.                 ismember(X,Stack) :-
  38.                     s:pop(Stack,_,X).
  39.                 ismember(X,Stack) :-
  40.                     s:pop(Stack,NewStack,_),
  41.                     ismember(X,NewStack).
  42.             end.
  43.  
  44.         structure memberstack = utils(stack2).
  45.  
  46.         structure stack3/stacksig =
  47.             struct
  48.                 newstack([]).
  49.                 pop([X|Stack],Stack,X).
  50.                 push(Stack,X,[X|Stack]).
  51.                 isempty([]).
  52.             end.
  53.  
  54.         functor moreutils(x/stacksig) =
  55.             struct
  56.                 structure stack = x.
  57.                 haslength(Stack,0) :-
  58.                     stack:isempty(Stack).
  59.                 haslength(Stack,Len) :-
  60.                     stack:pop(Stack,Nstack,_),
  61.                     haslength(Nstack,Part),
  62.                     Len is Part + 1.
  63.             end.
  64.  
  65.         structure one = utils(stack2).
  66.  
  67.         structure two = moreutils(stack3).
  68.  
  69. %        functor example(x/sig1, y/sig2) =
  70. %            struct
  71. %                 structure a = x.
  72. %                 structure b = y.
  73. %                 test :-
  74. %                     a:stack:newstack(X),
  75. %                     b:stack:isempty(X).
  76. %
  77. %            end.
  78. %
  79. %        structure final = example(one,two).
  80. %
  81. %        functor example(x/sig1, y/sig2 sharing x:stack = y:stack) =
  82. %            struct
  83. %                 ....
  84. %            end.
  85. %
  86. %        structure one = utils(stack2).
  87. %
  88. %        structure two = moreutils(stack2).
  89.